package com.dha.utility;

import java.util.List;

import javax.jws.WebService;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.dha.custom.GiaoVienCustom;
public class Utility {

	private static SessionFactory sessionFactory = new Configuration()
			.configure().buildSessionFactory();
	private static Session session;

	// Dựa vào mã số nhậ vào để xác định là giáo viên hay sinh viên
	// xong select theo từng đối tượng
	//select ra học kỳ top 1 của câu select hocKy dựa vào sắp xếp ngày giảm dần hiển thị bảng điểm hoặc thời khóa biểu <--> học kỳ hiện tại
	public static int layMaHocKyHienTai(String maSo) {
		try {
			session = sessionFactory.openSession();
			session.beginTransaction();
			String sql = "";
			// nếu mã số có độ dài là 12 ==> là sinh viên
			if (maSo.length() == 12) {
				sql = "select (lhpe.hocKy)"
						+ "from LopHocPhanEntity lhpe, LopHocPhanSinhVienEntity lhpsve, SinhVienEntity sve "
						+ "where lhpe.maLopHocPhan = lhpsve.maLopHocPhan "
						+ "and sve.maSinhVien = lhpsve.maSinhVien "
						+ "and sve.maSinhVien = ? "
						+ "order by lhpe.ngayHieuLuc desc";
			} else {
				// Nếu có độ dài là 7 ==> giáo viên
				if (maSo.length() == 7) {
					sql = "select (lhpe.hocKy) "
							+ "from LopHocPhanEntity lhpe, GiaoVienEntity gve "
							+ "where lhpe.maGiaoVien = gve.maGiaoVien "
							+ "and gve.maGiaoVien = ? "
							+ "order by lhpe.ngayHieuLuc desc";
				} else {
					// nếu không phải 2 đối tượng trên ==> return -1
					return -1;
				}
			}

			Query query = session.createQuery(sql);
			query.setParameter(0, maSo);
			query.setMaxResults(1);
			int ketQua = (int) query.list().get(0);

			return ketQua;
		} catch (Exception e) {
			// TODO: handle exception
			session.getTransaction().rollback();
			return -1;
		} finally {
			session.close();
		}
	}
	
	//lay ra mang cac hoc ky ton tai cua sinh vien hoac giao vien
	public static List<String> danhSachHocKy(String maSo){
		try {
			session = sessionFactory.openSession();
			session.beginTransaction();
			String sql = "";
			// nếu mã số có độ dài là 12 ==> là sinh viên
			if (maSo.length() == 12) {
				sql = "select DISTINCT lhpe.hocKy "
						+ "from LopHocPhanEntity lhpe, LopHocPhanSinhVienEntity lhpsve, SinhVienEntity sve "
						+ "where lhpe.maLopHocPhan = lhpsve.maLopHocPhan "
						+ "and sve.maSinhVien = lhpsve.maSinhVien "
						+ "and sve.maSinhVien = ?";
			} else {
				// Nếu có độ dài là 7 ==> giáo viên
				if (maSo.length() == 7) {
					sql = "select DISTINCT lhpe.hocKy "
							+ "from LopHocPhanEntity lhpe, GiaoVienEntity gve "
							+ "where lhpe.maGiaoVien = gve.maGiaoVien "
							+ "and gve.maGiaoVien = ?";
				} else {
					// nếu không phải 2 đối tượng trên ==> return -1
					return null;
				}
			}

			Query query = session.createQuery(sql);
			query.setParameter(0, maSo);
			int ketQua = (int) query.list().get(0);

			return query.list();
		} catch (Exception e) {
			// TODO: handle exception
			session.getTransaction().rollback();
			return null;
		} finally {
			session.close();
		}
	}
	//lay ra danh giao vien
	public static List<GiaoVienCustom> layDanhSachGiaoVien(){
		try {
			session = sessionFactory.openSession();
			session.beginTransaction();
			
			String sql = "select new com.dha.custom.GiaoVienCustom(gve.maGiaoVien, gve.tenGiaoVien) "
					+ "from GiaoVienEntity gve";
			
			Query query = session.createQuery(sql);
			
			return query.list();
		} catch (Exception e) {
			// TODO: handle exception
			session.getTransaction().rollback();
			return null;
		}
		finally{
			session.close();
		}
	}
}
